package BM1;

public class Solution
{
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     * @param head ListNode类
     * @return ListNode类
     */
    public ListNode ReverseList (ListNode head)
    {
        if (head == null ||  head.next == null)
            return head;
        ListNode pre = null;// 前节点
        ListNode cur = head;
        ListNode temp = null;// 临时存储节点
        while (cur != null)
        {
            temp = cur.next;  // 保存当前节点的下一个节点，这里不能是保存的当前节点，因为后面会移动当前节点
            cur.next = pre; // 反转
            pre = cur; // 前节点，移动到本节点
            cur = temp; // 当前节点，移动到本节点的下一个节点
        }
        return pre;
    }

    public static void main(String [] args)
    {
        // 构造链表 1→2→3
        ListNode n1 = new ListNode(1);
        ListNode n2 = new ListNode(2);
        ListNode n3 = new ListNode(3);
        n1.next = n2;
        n2.next = n3;
        ListNode newHead = new Solution().ReverseList(n1);

        // 打印结果
        while (newHead != null) {
            System.out.print(newHead.val);
            if (newHead.next != null) System.out.print("→");
            newHead = newHead.next;
        }
    }
}
